pca_df_total = read.csv('data/total_pre_pca.csv', header = TRUE) #climate values from all 19 BIOCLIM
# variables at both Xant and Yucc unique locations

pca_clim_total = prcomp(pca_df_total, center = T, scale. = T) # PCA dimension analysis for the 19
# variables and the elevation from all locations of the night lizard and the joshua tree 

# visualize the results

# screeplot
fviz_eig(pca_clim_total) # we see that the first two component contain a substantial amount of the total

#variance
# visualizing variables
fviz_pca_var(pca_clim_total,
             col.var = "contrib", 
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = T) #We see that precip and temp variables do split between pca directions, but not

# for all cases


# Here, we upload the appended dataframe where both night lizard and joshua tree features were rotated
# into the above PCA
total_pca_complete = read.csv('data/total_pca.csv', header = TRUE) # This is the final dataframe of PCA 
# components

# some of this code, done in a seperate markdown file: 

# Once we had the PCA from the total habitat, we rotated each species's set of BIOCLIM features with the
# total PCA from above. These steps are ommitted here for brevity, and a susbet of the code for this is
# commented out below:
# yucca = scale(yuc_climate, pca_clim_total$center, pca_clim_total$scale) %*% pca_clim_total$rotation
# xan = scale(xan_climate, pca_clim_total$center, pca_clim_total$scale) %*% pca_clim_total$rotation
# write.csv(xan, file = 'xanpcatotal.csv') #write.csv(yucca, file = 'yucpcatotal.csv')

Visualizing results

p_total <- plot_ly(total_pca_complete, x = ~PC1, y = ~PC2, z = ~PC3, color = ~X,
  colors = c('#BF382A', '#0C4B8E')) %>%
  add_markers() %>%
  layout(scene = list(xaxis = list(title = 'PC1'),
                     yaxis = list(title = 'PC2'),
                     zaxis = list(title = 'PC3')))
p_total
xan_set1 <-
  total_pca_complete %>%
  filter(X == 0) 
xan_set1 = xan_set1[,2:4]
yucca_set1 <-
  total_pca_complete %>%
  filter(X == 1) 

yucca_set1 = yucca_set1[,2:4]

hull_xan1 = convhulln(xan_set1, output.options = 'FA')
hull_xan1$vol #vol = 531.6
## [1] 531.5689
hull_yuc1 = convhulln(yucca_set1, output.options = 'FA')
hull_yuc1$vol #vol = 516.9
## [1] 516.8733
xanmesh = to.mesh3d(hull_xan1)
yucmesh = to.mesh3d(hull_yuc1)

wire3d(xanmesh, meshColor = c("faces"), color = "red")
dot3d(xanmesh, meshColor = c("faces"), color = "red")
wire3d(yucmesh, meshColor = c("faces"), color = "blue")
dot3d(yucmesh, meshColor = c("faces"), color = "blue")

Wire mesh PCA hulls: night lizard in red and joshua tree in blue